#include <stdio.h> #include <varargs.h> требуется для совместимости с UNIX V. #include <stdarg.h> требуется для совместимости со стандартом ANSI C. int vfprintf(stream, format-string, arg-ptr); int vprintf(format-string, arg-ptr); int vsprintf(buffer, format-string, arg-ptr); FILE *stream; указатель на структуру типа FILE. char *buffer; память для хранения результата char *format-string; строка управления форматом va_list arg-ptr; указатель на список аргументов.
Описание.
Функции vfprintf, vprintf, vsprintf форматируют и выводят данные соответственно в поток stream, поток стандартного вывода и буфер buffer. Эти функции похожи на свои двойники fprintf, printf, sprintf, но используют указатель на список аргументов вместо списка аргументов.
Format-string имеет ту же самую форму и функцию, что и аргумент строки формата для функции printf; (см. описание функции printf).
Параметр arg-ptr имеет тип va_list, определяемый в <vararg.h> и <stdarg.h>. Этот параметр указывает на список аргументов, которые преобразовываются и выводятся согласно соответствующим спецификациям формата в format-string.
Возвращаемое значение.
Возвращаемым значением является количество выведенных символов.
Пример:
В качестве примера приводится листинг программы, использующей <varargs.h> для совместимости с UNIX V.
#include <stdio.h> #include <varargs.h> main () { int line = 1; char *filename = "EXAMPLE"; . . . error("Error: line %d, file %s\n", line, filename); . . . error("Syntax error\n"); } error(va_alist); va_dcl; { char *fmt; va_list arg_ptr; va_start(arg_ptr); /* arg_ptr сейчас указывает на строку формата */ fmt = va_arg(arg_ptr, char *); /* arg_ptr сейчас указывает на аргумент после строки форма- та */ vprintf(fmt, arg_ptr); va_end(arg_ptr); }
На выходе:
Error: line 1, file EXAMPLE Syntax error.
Ниже приводится аналогичная программа, перезаписанная для совместимости со стандартом ANSI C.
#include <stdio.h> #include <stdarg.h> main () { int line = 1; char *filename = "EXAMPLE"; . . . error("Error: line %d, file %s\n", line, filename); . . . error("Syntax error\n"); } error(fmt); char *fmt; { va_list arg_ptr; va_start(arg_ptr, fmt); /* arg_ptr сейчас указывает на аргумент после строки форма- та */ vprintf(fmt, arg_ptr); va_end(arg_ptr); }
На выходе:
Error: line 1, file EXAMPLE Syntax error.